liburingutils: Add unit tests Bug: 385143770 Test: IOUringSocketHandler_tests Change-Id: I57de1b3bccee3e6e997786b9dd001a9cb7d625a5 Signed-off-by: Akilesh Kailash <akailash@google.com>
diff --git a/Android.bp b/Android.bp index f625107..fa190bc 100644 --- a/Android.bp +++ b/Android.bp
@@ -9,7 +9,10 @@ "src/IOUringSocketHandler.cpp", ], - cflags: ["-Werror"], + cflags: [ + "-Wall", + "-Werror", + ], export_include_dirs: ["include"], @@ -43,8 +46,8 @@ ], static_libs: [ "liburing", - ], - shared_libs: [ "liburingutils", + "libbase", + "liblog", ], }
diff --git a/include/IOUringSocketHandler/IOUringSocketHandler.h b/include/IOUringSocketHandler/IOUringSocketHandler.h index 226a5b2..6322ef0 100644 --- a/include/IOUringSocketHandler/IOUringSocketHandler.h +++ b/include/IOUringSocketHandler/IOUringSocketHandler.h
@@ -60,7 +60,7 @@ // Allocate 'num_buffers' of size 'buf_size' // - // num_buffers: The number of buffers to allocate. + // num_buffers: The number of buffers to allocate - Should be power of 2. // buf_size: The size of each buffer in bytes. // // This function allocates a set of buffers that will be used for I/O operations
diff --git a/src/IOUringSocketHandler.cpp b/src/IOUringSocketHandler.cpp index 0c68281..253158b 100644 --- a/src/IOUringSocketHandler.cpp +++ b/src/IOUringSocketHandler.cpp
@@ -115,6 +115,7 @@ void IOUringSocketHandler::DeRegisterBuffers() { if (registered_buffers_) { io_uring_free_buf_ring(&mCtx->ring, br_, num_buffers_, bgid_); + registered_buffers_ = false; } buffers_.clear(); num_buffers_ = 0;
diff --git a/src/IOUringSocketHandler_test.cpp b/src/IOUringSocketHandler_test.cpp index 67361f6..bd352cf 100644 --- a/src/IOUringSocketHandler_test.cpp +++ b/src/IOUringSocketHandler_test.cpp
@@ -20,12 +20,59 @@ class IOUringSocketHandlerTest : public testing::Test { public: - void testIsIouringEnabled(bool expectedResult) { - EXPECT_EQ(IOUringSocketHandler::isIouringEnabled(), expectedResult); + bool IsIouringEnabled() { + return IOUringSocketHandler::isIouringEnabled(); } + +protected: + std::unique_ptr<IOUringSocketHandler> handler_; + void InitializeHandler(int socket_fd = 1); + int queue_depth_ = 10; }; -TEST_F(IOUringSocketHandlerTest, ReturnsIouringNotEnabled) { - // TODO: b/385143770 - Change this behavior to check the OS version and Liburing version. - testIsIouringEnabled(false); +void IOUringSocketHandlerTest::InitializeHandler(int socket_fd) { + handler_ = std::make_unique<IOUringSocketHandler>(socket_fd); +} + +TEST_F(IOUringSocketHandlerTest, SetupIoUring) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); +} + +TEST_F(IOUringSocketHandlerTest, AllocateAndRegisterBuffers) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(8, 4096)); +} + +TEST_F(IOUringSocketHandlerTest, MultipleAllocateAndRegisterBuffers) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(4, 4096)); + handler_->DeRegisterBuffers(); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(2, 1024*1024L)); + handler_->DeRegisterBuffers(); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(32, 1024)); + handler_->DeRegisterBuffers(); + + // num_buffers should be power of 2 + EXPECT_FALSE(handler_->AllocateAndRegisterBuffers(5, 4096)); +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); }